package com.sinsz.wxpn;

/**
 * 消息处理接口
 * <p>
 *     需用户扩展实现.
 * </p>
 * @author chenjianbo
 * @date 2018-11-13
 */
public interface Handler {

    /**
     * 统一消息处理
     * <p>
     *     具体业务实现按不同的消息类型和事件类型由用户自行实现.
     * </p>
     * <p>
     *     MsgType消息类型如下：
     *
     *     text：文本消息；
     *     image：图片消息；
     *     voice：语音消息；
     *     video：视频消息；
     *     music：音乐消息；
     *     news：图文消息；
     *     shortvideo：小视频；
     *     location：地理位置；
     *     link：链接消息；
     *     event：事件；
     * </p>
     * <p>
     *     Event事件类型如下：
     *
     *     subscribe:                //订阅
     *     unsubscribe:              //取消订阅
     *     SCAN：                    //用户已关注时的事件推送
     *     LOCATION：                //上报地理位置事件
     *     CLICK：                   //自定义菜单事件
     *     VIEW：                    //点击菜单跳转链接时的事件推送
     *     TEMPLATESENDJOBFINISH：   //模板消息事件
     *     scancode_push：           //扫码推事件
     *     scancode_waitmsg：        //扫码推等待事件
     *     pic_sysphoto：            //弹出系统拍照发图的事件推送
     *     pic_photo_or_album：      //弹出拍照或者相册发图的事件推送
     *     pic_weixin：              //弹出微信相册发图器的事件推送
     *     location_select：         //弹出地理位置选择器的事件推送
     *     media_id：                //下发消息（订阅号使用）
     *     view_limited：            //跳转图文消息（订阅号使用）
     * </p>
     * @param message       消息内容
     * @param signature     参数签名
     * @param timestamp     生成时间
     * @param nonce         随机字符串
     * @param wechatID      微信公众号对应的微信ID
     * @return              回复消息的消息内容（回复消息不需要开发者自行加密，微信平台已实现加密信息）
     */
    String handler(String message, String signature, String timestamp, String nonce, String wechatID);

    /**
     * 默认的接口操作实例
     * @return      实例对象
     */
    default WxpnBean bean() {
        return SpringContext.getBean(WxpnBean.class);
    }

}
